/**
 * @param {character[][]} board
 * @return {boolean}
 */
var isValidSudoku = function(board) {
  let rowCount = new Array(10).fill(0), colCount = new Array(10).fill(0), arrCount = new Array(10).fill(0);
  // 验证行
  // 验证列
  for(let i = 0; i < 9; i++) {
    for(let j = 0; j < 9; j++) {
      if(board[i][j] == '.' && board[j][i] == '.')
        continue;
      else {
        if(board[i][j] != '.'){
          rowCount[board[i][j]]++;
        }
        if(board[j][i] != '.') {
          colCount[board[j][i]]++;
        }
      }
    }
    // console.log(`第${i}轮`, rowCount);
    for(let k = 0; k < 10; k++) {
      if(rowCount[k] > 1)
        return false;
      if(colCount[k] > 1)
        return false;
    }
    rowCount = new Array(10).fill(0), colCount = new Array(10).fill(0);
  }
  // 验证九宫格
  for(let i = 0; i < 9; i++) {
    for(let j = 0; j < 3; j++) {
      for(let k = 0; k < 3; k++) {
        let iIndex = Math.floor(i / 3) * 3 + j, jIndex = i % 3 * 3 + k;
        if(board[iIndex][jIndex] == '.')
          continue;
        else
          arrCount[board[iIndex][jIndex]]++;
      }
    }
    for(let l = 0; l < 10; l++) {
      if(arrCount[l] > 1)
        return false;
    }
    arrCount = new Array(10).fill(0);
  }

  return true;
};

let board =
[["5","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]];
console.log(isValidSudoku(board));
board =
[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]];
console.log(isValidSudoku(board));
board = [
  [".",".","4",".",".",".","6","3","."],
  [".",".",".",".",".",".",".",".","."],
  ["5",".",".",".",".",".",".","9","."],
  [".",".",".","5","6",".",".",".","."],
  ["4",".","3",".",".",".",".",".","1"],
  [".",".",".","7",".",".",".",".","."],
  [".",".",".","5",".",".",".",".","."],
  [".",".",".",".",".",".",".",".","."],
  [".",".",".",".",".",".",".",".","."]]
  console.log(isValidSudoku(board));
  board = [
    [".",".",".",".",".",".",".",".","."],
    [".",".",".",".",".",".",".",".","."],
    [".","9",".",".",".",".",".",".","1"],
    ["8",".",".",".",".",".",".",".","."],
    [".","9","9","3","5","7",".",".","."],
    [".",".",".",".",".",".",".","4","."],
    [".",".",".","8",".",".",".",".","."],
    [".","1",".",".",".",".","4",".","9"],
    [".",".",".","5",".","4",".",".","."]]
  console.log(isValidSudoku(board));

